﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 人员管理4
{

    internal class Person
    {
        public long ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
        public string Addr { get; set; }

    }

    internal class PersonUtils
    {
        private static readonly string constr = "Data Source=Person.db;Version=3;";


        internal List<Person> SelectAll()
        {
            List<Person> persons = new List<Person>();
                
            string selectDataCommand = "SELECT id,name,age,sex,addr FROM Person order by id asc ;"; // 用于验证数据是否已插入
                                                                // 
            using (var connection = new SQLiteConnection(constr))
            {
                try
                {
                    connection.Open(); // 打开连接  
                    using (var selectCommand = new SQLiteCommand(selectDataCommand, connection))
                    {
                        using (var reader = selectCommand.ExecuteReader()) // 执行查询并读取数据  
                        {
                            while (reader.Read()) // 遍历结果集（如果有的话）  
                            {
                                Person person = new Person() 
                                { 
                                    ID = reader.GetInt32(0),
                                    Name = reader.GetString(1),
                                    Age = reader.GetInt32(2),
                                    Sex = reader.GetString(3),
                                    Addr = reader.GetString(4)
                                };

                                persons.Add(person);
                            }
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}"); // 输出错误消息（如果发生）
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            }
            return persons;
        }

        internal bool EditPerson(long selId, string name, string age, string sex, string addr)
        {
            bool b = false;

            Person person = new Person() 
            { 
                ID = selId,
                Name = name,
                Addr = addr,
                Age = Convert.ToInt32(age), 
                Sex = sex
            
            };

            using (var connection = new SQLiteConnection(constr))
            {
                string updateDataCommand = $"update Person set Name = '{name}',Age = {age},Sex='{sex}',Addr='{addr}' where Id = {selId};";
                try
                {
                    connection.Open(); // 打开连接  
                    using (var updateCommand = new SQLiteCommand(updateDataCommand, connection))
                    {
                        int v = updateCommand.ExecuteNonQuery(); // 插入数据  
                        if(v > 0)
                        {
                            b = true;
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}");  // 输出错误消息（如果发生）  
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            }
            return b;
        }

        internal bool DeletePerson(long selId)
        {
            bool b = false;

            using (var connection = new SQLiteConnection(constr))
            {
                string deleteDataCommand = $" delete from Person where id = {selId};";
                try
                {
                    connection.Open(); // 打开连接  
                    using (var deleteCommand = new SQLiteCommand(deleteDataCommand, connection))
                    {
                        int v = deleteCommand.ExecuteNonQuery(); // 插入数据  
                        if (v > 0)
                        {
                            b = true;
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}");  // 输出错误消息（如果发生）  
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            }
            return b;
        }

        internal bool InsertPerson(string name, string age, string sex, string addr)
        {
            bool b = false;

            Person person = new Person()
            {
                Name = name,
                Addr = addr,
                Age = Convert.ToInt32(age),
                Sex = sex

            };

            using (var connection = new SQLiteConnection(constr))
            {
                string insertDataCommand = $"INSERT INTO Person (Name,Age,Sex,Addr) VALUES ('{name}',{age},'{sex}','{addr}');";
                try
                {
                    connection.Open(); // 打开连接  
                    using (var insertCommand = new SQLiteCommand(insertDataCommand, connection))
                    {
                        int v = insertCommand.ExecuteNonQuery(); // 插入数据  
                        if (v > 0)
                        {
                            b = true;
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}");  // 输出错误消息（如果发生）  
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            }
            return b;

        }

        internal bool CreatePersonTable()
        {
            bool b = false;
            if(!CheckTalbleEx("Person"))
            {
                string createTableCommand = "CREATE TABLE Person (Id INTEGER PRIMARY KEY, Name TEXT,Age INTEGER,Sex TEXT,Addr TEXT);";
                using (var connection = new SQLiteConnection(constr))
                {
                    try
                    {
                        connection.Open(); // 打开连接  
                        using (var command = new SQLiteCommand(createTableCommand, connection))
                        {
                            int v = command.ExecuteNonQuery(); // 创建表  
                            if (v > 0)
                            {
                                b = true;
                            }
                        }
                    }
                    catch (Exception ex) // 捕获并打印任何异常（可选）  
                    {
                        MessageBox.Show($"Error:{ex.Message}");  // 输出错误消息（如果发生）  
                    }
                    finally // 确保关闭连接（可选）  
                    {
                        connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                    }
                } // using connection block ends here. Connection is closed and resources are released. 
            }
            else
            {
                b = true;
            }
            return b;
        }


        /// <summary>
        /// 查询人员列表
        /// </summary>
        /// <param name="name"></param>
        /// <param name="age"></param>
        /// <param name="sex"></param>
        /// <param name="addr"></param>
        /// <returns></returns>
        internal List<Person> FindPersons(string name, string age, string sex, string addr)
        {
            List<Person> persons = new List<Person>();
            using (var connection = new SQLiteConnection(constr))
            {
                StringBuilder sb = new StringBuilder(" SELECT id,name,age,sex,addr FROM Person ");
                sb.Append(" where 1=1 ");

                if (name != null && name.Trim().Length > 1)
                {
                    sb.Append($" and name like '%{name.Trim()}%' ");
                }

                if (age != null && age.Trim().Length > 1)
                {
                    sb.Append($" and age='{age.Trim()}' ");
                }

                if (sex != null && sex.Trim().Length > 1)
                {
                    sb.Append($" and sex='{sex.Trim()}' ");
                }

                if (addr != null && addr.Trim().Length > 1)
                {
                    sb.Append($" and addr='{addr.Trim()}' ");
                }

                sb.Append(" order by id asc ");

                try
                {
                    connection.Open(); // 打开连接  
                    using (var selectCommand = new SQLiteCommand(sb.ToString(), connection))
                    {
                        using (var reader = selectCommand.ExecuteReader()) // 执行查询并读取数据  
                        {
                            while (reader.Read()) // 遍历结果集（如果有的话）  
                            {
                                Person person = new Person()
                                {
                                    ID = reader.GetInt32(0),
                                    Name = reader.GetString(1),
                                    Age = reader.GetInt32(2),
                                    Sex = reader.GetString(3),
                                    Addr = reader.GetString(4)
                                };

                                persons.Add(person);
                            }
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}"); // 输出错误消息（如果发生）
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            }
            return persons;
        }

        private bool CheckTalbleEx(string tableName)
        {
            bool b = false;
            string sql = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}';";
            using (var connection = new SQLiteConnection(constr))
            {
                try
                {
                    connection.Open(); // 打开连接  
                    using (var command = new SQLiteCommand(sql, connection))
                    {
                        using (var reader = command.ExecuteReader()) // 执行查询并读取数据  
                        {
                            while (reader.Read()) // 遍历结果集（如果有的话）  
                            {
                                b = true ;
                            }
                        }
                    }
                }
                catch (Exception ex) // 捕获并打印任何异常（可选）  
                {
                    MessageBox.Show($"Error:{ex.Message}");  // 输出错误消息（如果发生）  
                }
                finally // 确保关闭连接（可选）  
                {
                    connection.Close(); // 关闭连接（如果需要）或使用 using 语句自动处理此操作。  
                }
            } // using connection block ends here. Connection is closed and resources are released.  
            return b;
        }
    }
}
